 
/* 
 * Copyright (C) Ignacio Lucas
 */
 
#include "common.h"
#include "queue.h"
#include "worker.h"
#include "server_worker.h"
#include <signal.h>

// fin por error de la aplicacion.
void catch_segfault(int e)
{
	fprintf(stderr,  "\nERROR INESPERADO EN LA APLICACION!!! Abortando!!!");fflush(stderr);
	fflush(stdout);
	exit(e);
}

void finalize(int e)
{
	fprintf(stderr,  "\nFINALIZE!!! Abortando!!!");fflush(stderr);
	jobs_controller_destroy();
	exit(e);
}

// fin normal de la aplicacion.
void finalize_sigint(int e)
{
	jobs_controller_destroy();
	exit(0);
}

/**
  funcion main de la aplicacion. 
  Toma la configuracion pasada por parametro e inicializa el modulo jobs_controller, para arrancar
  el funcionamiento de la plataforma.
**/
int main(int argc, char **argv)
{
	//jobs_controller_config config;

	/*if (argc != 3){
		fprintf(stderr, "\nInvocar con 2 parametros: Archivo de configuracion del sistema y archivo de configuracion del log");
		finalize(1);
	}*/
	if (logger_init(getenv("MASHUP_SERVER_LOG_FILE")))
	{
		fprintf(stderr,  "\nError inicializando logger_manager!");fflush(stderr);
		finalize(2);
	}
	
	//worker_service_init();
	signal(SIGSEGV, catch_segfault);
	
	// Para el caso de sockets, delegamos en la libreria de sockets el manejo del error SIGPIPE.
	signal(SIGPIPE, SIG_IGN);
	
	// Al presionar Control-C, apagamos el programa.
	signal(SIGINT, finalize_sigint);
		
	//config.listen_port=atoi(argv[2]);

	// escucha en todas las IP del servidor.
	//strcpy(config.listen_ip, "0.0.0.0");
	//config.server_workers_count=atoi(argv[1]);
	//config.backlog_queue=512;
	if ((jobs_controller_init()) != 0)
	{
		logger_core_error("%s","no se puede crear jobs_controller");
		finalize(2);
	}

	// espera una senial del sistema operativo.	
	pause();
	finalize(0);
	return 0;
}
